package mygame;

import character.ai.AIAppState;
import com.jme3.app.SimpleApplication;
import com.jme3.app.state.AppStateManager;
import com.jme3.asset.AssetManager;
import com.jme3.bullet.BulletAppState;
import com.jme3.input.FlyByCamera;
import com.jme3.input.InputManager;
import com.jme3.renderer.ViewPort;
import com.jme3.scene.Node;
import de.lessvoid.nifty.Nifty;
import java.util.concurrent.ScheduledThreadPoolExecutor;

/** Holds references to many things which are needed across the entire codebase. */
public abstract class DataStore {
    /**
     * The main application object, used for multi-thread synchronization with the JME Render thread.
     * Any threads which wish to modify the scene graph must enqueue a Callable on this object.
     */
    public static SimpleApplication app;
    /** Manages the thread pool available to this app. */
    public static ScheduledThreadPoolExecutor executor;
    /** Manager that manages app states. */
    public static AppStateManager stateManager;
    /** Manager that manages project assets. */
    public static AssetManager assetManager;
    /** Manages player input. */
    public static InputManager inputManager;
    /** The view port which represents the player's screen. */
    public static ViewPort viewPort;
    /** Used to manage the GUI. */
    public static Nifty nifty;
    /** App state that handles physics. */
    public static BulletAppState bulletAppState;
    /** App state that handles artificial intelligence. */
    public static AIAppState aiAppState;
    /** App state that handles user input while in-game. */
    public static InGameInputAppState inGameInputAppState;
    /** The abstract player. */
    public static Player player;
    /** The fly cam. This probably won't be here forever. */
    public static FlyByCamera flyCam;
    /** Shortcut nodes to important places. These nodes are attached directly to the rootNode are are not saved to disk. */
    public static Node rootNode, tempNode, voxelWireframeNode;
    /**
     * Attached to the rootNode; holds all of the hub nodes and other information which defines the state of the world.
     * This is the node which is saved to disk.
     */
    public static WorldStateNode worldStateNode;
}
